#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <assert.h>
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 11
#define DEFAULT_SZ 1
#define DEFAULT_INC 1

// 利用枚举定义菜单列表
enum menu
{
    Exit,
    ADD,
    DEL,
    MODIFY,
    SEARCH,
    SHOW,
    // SORT,
    EMPTY,
    // Save
};

// 定义存储联系人的结构体
typedef struct PeoInfo
{
    char name[NAME_MAX];
    char sex[SEX_MAX];
    char tele[TELE_MAX];
    char addr[ADDR_MAX];
    int age;
} PeoInfo;
// 定义管理联系人结构体的结构体指针
typedef struct contact
{
    PeoInfo *data; //结构体指针管理联系人信息的结构体
    int sz;
    int capacity; //维护动态内存开辟的容量
} Contact, *pContact;
int check_capacity(pContact p);            //检查通讯录大小是否大于最大容量，如果
void LoadContact(pContact p);              //从文件中导入通讯录
void InitContact(pContact p);              //初始化管理者结构体
void AddContact(pContact p);               //添加联系人
void DelContact(pContact p);               //删除联系人
void ModifyContact(pContact p);            //修改联系人
void SearchContact(pContact p);            //搜索联系人
void ShowContact(pContact p);              //显示全部联系人
void SortContact(pContact p);              //按姓名首字母对通信录进行排序
void EmptyContact(pContact p);             //清空联系人
void SaveContact(pContact p);              //将通讯录保存到文件中
void DestroyContact(pContact p);           //摧毁通讯录
void LoadContact(pContact p);              //从文件中导入通信录
static int FindEntry(char *c, pContact p); //判断通信录是否为空
void printPeo(PeoInfo *p);
int Exit_();